package 对象;

public class studentTest {
    public static void main(String[] args) {
        //定义数组存储三个学生对象
        student[] all = new student[3];
        student s1 = new student(1,"王强",18);
        student s2 = new student(2,"张三",21);
        student s3 = new student(3,"李四",20);
        
        all[0] = s1;
        all[1] = s2;
        all[2] = s3;
        //添加的时候需要进行学号的唯一性判断
        //判断id在数组中是否存在，不存在则存进去；存在就提示已经存在
        //定义一个要存进去的数据
        student s4 = new student(4 , "小高" ,18);
        //判断学号的唯一性
        boolean falg = contins(all, s4.getId());
        if (falg) {
            //已经存在，不添加
            System.out.println("学号重复，添加失败");
            //换行处理
            System.out.println();
            toGo(all);
        } else {
            System.out.println("添加成功");
            //不存在，添加
            //判断数组里面是否存满了
            int count =getCount(all);
            //若满了，则重新建一个数组，把旧的赋值进去，并且把新的数据也放进去
            if (count == all.length) {
                //已经存满了
                //创建一个新的数组，长度是原来数组+1；并且把旧的放进来，新的数据也放进来
                student[] newAll = new student[all.length+1];
                //旧的复制
                for (int i = 0; i < all.length; i++) {
                    newAll[i] = all[i];
                }
                //新的放进来
                newAll[newAll.length-1] = s4;
                //换行处理
                System.out.println();
                //遍历数组
                toGo(newAll);
            } else {
                student[] newAll =all;
                newAll[count] = s4;
                //换行处理
                System.out.println();
                //遍历数组
                toGo(all);
        }
        }
        student[] newAll =all;
        //通过id删除学生信息
        deSt(newAll, 1);
        //遍历数组
        toGo(newAll);

        //id为2的同学，年龄加1
        for (int i = 0; i < newAll.length; i++) {
            if (all[i].getId() == 2) {
                all[i].setAge(all[i].getAge() + 1);
            }
        }
        //换行处理
        System.out.println();
        //遍历数组
        toGo(newAll);

    }

    //写一个方法判断学号的唯一性
    public static boolean contins(student[] arr , int id) {
        for (int i = 0; i < arr.length; i++) {
            student stu = arr[i];
            int sid = stu.getId();
            if (sid == id) {
//                System.out.println("重复了！！");
                return true;
            }
        }
        return false;
    }
    
    //写一个方法来确定数组中已经存了几个元素
    public static int getCount(student[] arr){
         //定义一个计数器来统计
        int count = 0;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i].getId() == 0 || arr[i].getName() == null ||arr[i].getAge() == 0 ) {
                //若数组里有空的元素则表示这个没有存
                System.out.println();
            }else {
                count++;
            }
        }
        return count;
    }

    //定义一个方法，通过id删除学生信息
    public static void deSt( student[] stu, int id) {
        for (int i = 0; i < stu.length; i++) {
            if (stu[i].getId() == id) {
                System.out.println("已经删除");
                stu[i].setAge(0);
                stu[i].setName(" ");
                stu[i].setId(0);
                break;
            } else {
                System.out.println("删除失败");
            }
        }
    }

    //遍历数组的方法
    public static void toGo(student[] stu){
        //遍历数组
        for (int i = 0; i < stu.length; i++) {
            System.out.print(stu[i].getId() + " ");
            System.out.print(stu[i].getName() + " ");
            System.out.print(stu[i].getAge() + " ");
            System.out.println();
        }
    }
}
